package pl.egraveyard.bo;

import org.apache.commons.lang.Validate;

import pl.egraveyard.dao.AdresDao;
import pl.egraveyard.dao.KlientDao;
import pl.egraveyard.dao.UzytkownikDao;
import pl.egraveyard.domain.Klient;
import pl.egraveyard.domain.Uzytkownik;

/**
 * Implementacja interfejsu {@link UzytkownikBO}
 * @author gunos
 *
 */
public class UzytkownikBOImpl implements UzytkownikBO{
	private UzytkownikDao uzytkownikDao;
	private AdresDao adresDao;
	private KlientDao klientDao;
	
	/**
	 * @param uzytkownikDao the uzytkownikDao to set
	 */
	public void setUzytkownikDao(UzytkownikDao uzytkownikDao) {
		this.uzytkownikDao = uzytkownikDao;
	}

	/**
	 * @param adresDao the adresDao to set
	 */
	public void setAdresDao(AdresDao adresDao) {
		this.adresDao = adresDao;
	}

	/**
	 * @param klientDao the klientDao to set
	 */
	public void setKlientDao(KlientDao klientDao) {
		this.klientDao = klientDao;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void createUser(Uzytkownik uzytkownik) {
		Validate.notNull(uzytkownik);
		Validate.notNull(uzytkownik.getAdres());
		if(uzytkownik.getAdres().getId() == null){
			adresDao.create(uzytkownik.getAdres());
		}
		uzytkownikDao.create(uzytkownik);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void updateUser(Uzytkownik uzytkownik) {
		Validate.notNull(uzytkownik);
		Validate.notNull(uzytkownik.getAdres());
		adresDao.update(uzytkownik.getAdres());
		uzytkownikDao.update(uzytkownik);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Uzytkownik readUser(Integer id) {
		return uzytkownikDao.read(id);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Uzytkownik readUser(String login) {
		return uzytkownikDao.read(login);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Klient readCustomer(String login) {
		return klientDao.read(login);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void createCustomer(Klient klient) {
		Validate.notNull(klient);
		Validate.notNull(klient.getAdres());
		if(klient.getAdres().getId() == null){
			adresDao.create(klient.getAdres());
		}
		klientDao.create(klient);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void updatCustomer(Klient klient) {
		Validate.notNull(klient);
		Validate.notNull(klient.getAdres());
		klientDao.update(klient);
		adresDao.update(klient.getAdres());
	}

}
